﻿using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CPPEI.Console
{
    public static class StartupAppUtil
    {
        /// <summary>
        /// 启动程序不执行更新
        /// </summary>
        /// <param name="appInfo"></param>
        //public static void StartupAppNoUpdate(AppInfo appInfo)
        //{
        //    ProcessStartInfo processStartInfo = new ProcessStartInfo();
        //    processStartInfo.FileName = appInfo.AppFile;
        //    processStartInfo.Arguments = string.Format("/{0} {1}", Coolzon.Common.Startup.StartupParam.PARAM_CHECKVERSION, false);
        //    processStartInfo.UseShellExecute = true;
        //    processStartInfo.Verb = "runas";   
        //    Process.Start(processStartInfo);
        //}

        public static void StartupApp(AppInfo appInfo, string arguments)
        {
            ProcessStartInfo processStartInfo = new ProcessStartInfo();
            processStartInfo.FileName = appInfo.AppFile;
            processStartInfo.Arguments = arguments;
            processStartInfo.UseShellExecute = true;
            processStartInfo.Verb = "runas";  
            Process.Start(processStartInfo);
        }

        /// <summary>
        /// 启动一个应用程序
        /// </summary>
        /// <param name="company"></param>
        /// <param name="product"></param>
        /// <param name="app"></param>
        /// <param name="arguments"></param>
        public static void StartupApp(string company, string product, string app, string arguments)
        {
            AppInfo appInfo = AppInfoRegistryUtil.GetAppInfo(company, product, app);
            if (appInfo != null)
            {
                StartupApp(appInfo, arguments);
            }
        }

        /// <summary>
        /// 设置应用程序开机自动运行
        /// </summary>
        /// <param name="name"></param>
        /// <param name="fileName">应用程序的文件名</param>
        /// <param name="isAutoRun">是否自动运行，为false时，取消自动运行</param>
        /// <exception cref="System.Exception">设置不成功时抛出异常</exception>
        public static void SetAutoRun(string name, string fileName, bool isAutoRun)
        {
            RegistryKey reg = null;
            try
            {
                if (!System.IO.File.Exists(fileName))
                {
                    throw new Exception("该文件不存在!");
                }
                reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
                if (reg == null)
                {
                    reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
                }
                if (isAutoRun)
                {
                    reg.SetValue(name, fileName);
                }
                else
                {
                    reg.SetValue(name, false);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (reg != null)
                {
                    reg.Close();
                }
            }

        }
    }
}
